//slow表示当前可以保留数字的下标，fast表示已经检查到了哪个数字
//如果nums[fast] == nums[slow]，说明重复，fast位置的数字就要被舍弃
//如果nums[fast] != nums[slow]，说明没重复，fast位置的数字就要被添加，即nums[++slow] = nums[fast]

//如果nums中的数字只允许重复n次
//如果nums[fast] == nums[slow - n + 1]，由于数组有序，说明fast前已经有n个数重复了，fast位置的数字就要被舍弃
//如果nums[fast] != nums[slow - n + 1]，说明还没有重复n次，fast位置的数字就要被添加，即nums[++slow] = nums[fast]

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.size() <= 1)
            return 1;

        int slow = 0;
        for (int fast = 1; fast < nums.size(); ++fast)
        {
            if (nums[fast] != nums[slow])
                nums[++slow] = nums[fast];
        }

        return slow + 1;
    }
};